package com.heima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.heima.exception.BaseException;
import com.heima.mapper.SkuClassMapper;
import com.heima.pojo.dto.SkuClassSearchDto;
import com.heima.pojo.entity.SkuClass;
import com.heima.pojo.vo.SkuClassSearchVo;
import com.heima.service.SkuClassService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.util.List;

/**
 * @author ljk74
 */
@Service
@RequiredArgsConstructor
public class SkuClassServiceImpl implements SkuClassService {
    private final SkuClassMapper skuClassMapper;

    /**
     * 新增商品类型
     *
     * @param skuClass
     */
    @Override
    public void addClass(SkuClass skuClass) {
        List<SkuClass> skuClasses = skuClassMapper.selectByName(skuClass.getClassName());
        if (!CollectionUtils.isEmpty(skuClasses)) {
            throw new BaseException("该商品分类已存在");
        }
        skuClassMapper.insert(skuClass);
    }

    /**
     * 商品类型搜索
     * 该方法用于根据商品类型名称分页搜索商品类型信息
     *
     * @param skuClassSearchDto 搜索条件传输对象，包含页码索引、页面大小和商品类型名称
     * @return 返回一个SkuClassSearchVo对象，其中包含了分页搜索的结果和相关统计信息
     */
    @Override
    @Transactional
    public SkuClassSearchVo page(SkuClassSearchDto skuClassSearchDto) {
        // 开始分页，设置页码索引和页面大小
        PageHelper.startPage(skuClassSearchDto.getPageIndex(), skuClassSearchDto.getPageSize());
        // 根据商品类型名称查询商品类型列表
        List<SkuClass> list = skuClassMapper.selectByName(skuClassSearchDto.getClassName());

        // 将查询结果转换为分页对象
        Page<SkuClass> p = (Page<SkuClass>) list;
        Long totalCount = p.getTotal();

        // 创建商品类型搜索结果传输对象，用于返回分页信息和结果
        SkuClassSearchVo sVo = new SkuClassSearchVo();
        // 设置页码索引
        sVo.setPageIndex(String.valueOf(skuClassSearchDto.getPageIndex()));
        // 设置页面大小
        sVo.setPageSize(String.valueOf(skuClassSearchDto.getPageSize()));
        // 设置总记录数
        sVo.setTotalCount(String.valueOf(totalCount));
        // 计算并设置总页数
        //String.valueOf((int) Math.ceil((double) totalCount / skuClassSearchDto.getPageSize()))
        sVo.setTotalPage(String.valueOf((int) Math.ceil((double) totalCount / skuClassSearchDto.getPageSize())));
        // 设置当前页记录
        sVo.setCurrentPageRecords(p.getResult());
        // 返回搜索结果
        return sVo;
    }

    @Override
    public SkuClass selectById(Integer classId) {
        return skuClassMapper.selectById(classId);
    }

    @Override
    public void update(Integer classId, SkuClass skuClass) {
        skuClass.setClassId(classId);
        skuClassMapper.updateById(skuClass);
    }

    @Override
    public void delById(String classId) {
        skuClassMapper.deleteById(classId);
    }
}
